%% @author Administrator
%% @doc @todo Add description to util_msg.


-module(util_msg).

-include("net.hrl").
-include("global.hrl").
-include("config.hrl").


%% ====================================================================
%% API functions
%% ====================================================================
-export([decode_msg/2,
		 encode_msg/2]).



%% ====================================================================
%% Internal functions
%% ====================================================================


%% @doc 解码信息获得协议号和消息
decode_msg(MsgId, BinMsg) ->
	MsgName = msg_id2msg_name(?MSG_TYPE_C2S, MsgId),
	PbMod = msg_id2pb_mod(MsgId),
	Msg = PbMod:decode_msg(BinMsg, MsgName),
	Msg.

encode_msg(MsgId, Msg) ->
	PbMod = msg_id2pb_mod(MsgId),
	PbMod:encode_msg(Msg).


%% @doc 将协议id转换为协议模块名
msg_id2msg_name(MsgType, MsgId) when is_integer(MsgId) ->
	case lists:member(MsgType, [?MSG_TYPE_C2S, ?MSG_TYPE_S2C]) of
		true ->
			list_to_atom(MsgType ++ integer_to_list(MsgId));
		_ ->
			?undefined
	end.

%% @doc 通过协议id读表获取协议名
msg_id2pb_mod(MsgId) when is_integer(MsgId) ->
	case cfg_proto:get(MsgId) of
		#cfg_proto{pb_mod = PbMod} ->
			PbMod;
		_ ->
			?undefined
	end.